package com.lcy;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.TimePickerDialog;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.SimpleCursorAdapter;
import android.widget.Spinner;
import android.widget.TimePicker;
import android.widget.Toast;

public class CardInfoCreate extends Activity implements OnClickListener {
	
	private DBManager dbmgr;
	private SQLiteDatabase sdb;	
	private Cursor cursor;					//Seq를 구하기 위한 커서.
	private Cursor cSpin;					//Spinner을 담기 위한 커서
	private SimpleCursorAdapter adapter;	//카드사 스피너의 값을 담을 어댑터
	
	private Button date_input;
	private Calendar calendar = Calendar.getInstance();
	
	private String str_card_nm = ""; 
	
	//DatePickerDialog CallbackListener
	DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener(){
		
		@SuppressWarnings("static-access")
		public void onDateSet(DatePicker view, int year, int monthOfYear, int dateOfmonth){
			calendar.set(Calendar.YEAR, year);
			calendar.set(calendar.MONTH, monthOfYear);
			calendar.set(Calendar.DAY_OF_MONTH, dateOfmonth);
			updateDateText(); //현재 세팅된 날짜로 date_input 버튼에 표시해준다.
		}
	};
	
	//TimePickerDialog 생성
	TimePickerDialog.OnTimeSetListener time = new TimePickerDialog.OnTimeSetListener(){
		public void onTimeSet(TimePicker view, int hourOffDay, int minute){
			calendar.set(Calendar.HOUR_OF_DAY, hourOffDay);
			calendar.set(Calendar.MINUTE, minute);
		}
	};
	
	public void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		setContentView(R.layout.input_form);
		this.initDB();	//DB를 초기화 한다.
		
		//취소 버튼 클릭시 초기 화면으로..
		Button cancel_btn = (Button)findViewById(R.id.button_cancel);  		
		cancel_btn.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent it = new Intent(CardInfoCreate.this, Lcy10Activity.class);
				startActivity(it);
				finish();	
				
			}
		});
		
		//저장버튼 이벤트 
		Button save_btn = (Button)findViewById(R.id.button_save);
		save_btn.setOnClickListener(this);
		
		//카드사 가져오기 카드사 세팅
		Spinner spin = (Spinner)findViewById(R.id.edit_card_name);
		spin.setPrompt("카드사를 선택하세요");
		cSpin = sdb.rawQuery("select _id,sub_cd,sub_nm from COMMON_CODE", null);
		
		cSpin.moveToFirst();
		String[] from = new String[]{"sub_nm","sub_cd"};
		int[] to = new int[]{android.R.id.text1,android.R.id.text2};        		
    	adapter = new SimpleCursorAdapter(
    			this, 
				android.R.layout.simple_spinner_item, 
				cSpin, 
				from, 
				to 
		);
    	spin.setAdapter(adapter);
    	
    	spin.setOnItemSelectedListener(new OnItemSelectedListener() {

			@Override
			public void onItemSelected(AdapterView<?> parent, View view,
					int position, long id) {
				// TODO Auto-generated method stub
				Cursor c;
				c = (Cursor)adapter.getItem(position);		//현재 posion의 Object를 가져온다.
				str_card_nm = c.getString(1);				//커서의 값을 가져온다.
				
				//String mes;
				//mes = "Select Item = " + c.getString(1);	//커서의 값을 가져온다.				
				//Toast.makeText(CardInfoCreate.this, mes, Toast.LENGTH_SHORT).show();
				
			}

			@Override
			public void onNothingSelected(AdapterView<?> arg0) {
				// TODO Auto-generated method stub
				
			}
    		
		});
    	
		
		//최초 결재일 Box 클릭시 이벤트 처리..
		date_input = (Button)findViewById(R.id.edit_first_date);  
		date_input.setOnClickListener(new View.OnClickListener() {
			
			@SuppressWarnings("static-access")
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				new DatePickerDialog(CardInfoCreate.this, date,
						calendar.get(calendar.YEAR),
						calendar.get(calendar.MONTH),
						calendar.get(calendar.DAY_OF_MONTH)).show();
			}
		});
		
		
		//입력화면 호출시 오늘날짜로 시간 세팅
		this.setInitDateText();		 		
	}
	
	@Override
	public void onClick(View v) {
		
		// TODO Auto-generated method stub
		
		//품명
		EditText pur_nm = (EditText)findViewById(R.id.edit_pur_name);
		String str_pur_nm = pur_nm.getText().toString();
				
		//총개월수
		EditText tot_month = (EditText)findViewById(R.id.edit_month_cnt_tot);
		String str_tot_month = tot_month.getText().toString();
		
		//금액
		EditText amount = (EditText)findViewById(R.id.edit_amount);
		String str_amount = amount.getText().toString();
		
		//수수료율
		EditText charge_per = (EditText)findViewById(R.id.charge_per);
		String str_charge_per = charge_per.getText().toString();
		
		//최초결재일
		String str_first_date = date_input.getText().toString();
						
		//만기일을 구한다. 
		String[] temp = str_first_date.split("[.]");
		Calendar temp_dt = Calendar.getInstance();			
		int temp_month = 0;		
		if(Integer.parseInt(str_tot_month) > 0){
			temp_month = Integer.parseInt(temp[1])+(Integer.parseInt(str_tot_month)-1);	 //최초결재일이 입력되기때문에 만기일은 총개월수에서 -1을 빼야함.	
		}else{
			temp_month = Integer.parseInt(temp[1])+(Integer.parseInt(str_tot_month));
		}
				
		
		//만기가 되는 날을 세팅한다.
		temp_dt.set(Integer.parseInt(temp[0]),temp_month-1, Integer.parseInt(temp[2]) );
		
		//남은개월수를 구한다. (상세화면에서 다시)
		Calendar current_dt = Calendar.getInstance();		
				
		//잔액(상세화면에서 다시)
		String str_balance = "";
		
		//남은개월수 (상세화면에서 다시)
		long nm_month_cnt_re = ((temp_dt.getTimeInMillis()-current_dt.getTimeInMillis())/(60*60*24*1000))/30;
		int cv_month_cnt_re = (int)nm_month_cnt_re;
				
		//만기일
		String str_expir_date = "";
		str_expir_date = chang_Cal(temp_dt.getTime());
		
		
		
		
		if(v.getId() == R.id.button_save){
			/*
			//화면에 다이얼로그 뿌려줌.
	    	AlertDialog.Builder alert = new AlertDialog.Builder(CardInfoCreate.this);
	    	alert.setTitle("알림창");
	    	alert.setMessage("templng1: "+cv_month_cnt_re);
	    	//alert.setMessage("만기일: "+str_expir_date+"\n남은개월:"+nm_month_cnt_re+"\n현재일:"+current_dt.getTime());
	    	//alert.setMessage("품명:"+str_pur_nm+"\n총개월수 :"+str_tot_month+"\n금액 :"+str_amount+"\n수수료율 :"+ str_charge_per+"\n최초결재일 :"+ str_first_date+"\n카드사 :"+ str_card_nm);
	    	alert.setIcon(R.drawable.icon);
	    	alert.setPositiveButton("확인", null);
	    	alert.show();
	    	*/
			
				
						
			try{
				//잔액과 남은 개월 수는 상세 보기 화면에서 구하면 됨 ㅡㅡ;;
								
				String seq_id = "";		//seq_id를 담을 변수
				cursor =  sdb.rawQuery("select max(_id)+1 as sno from CARD_INFO", null);
					
					
				//cursor 객체를이용하여테이블로부터한행씩이동하면서화면에출력          
                while(cursor.moveToNext()){
                	if( cursor.getString(0) == null ){
                        seq_id = "0";                    //테이블초기생성시 ROW가없기때문에 null이나온다. 초기값이므로 "0세팅"
                	}else{
                        seq_id = cursor.getString(0);//첫번째행       
                	}
                }   
					
				sdb.execSQL("insert into CARD_INFO values("+"'',"+						//이미지경로
														  "'"+ seq_id +"',"+			//_id
														  "'"+ str_pur_nm +"', "+		//품명
														  "'"+ str_tot_month +"',"+		//총개월수
														  "'"+ str_amount +"', "+		//금액
														  "'"+ str_first_date +"',"+	//최초결재일
														  "'"+ str_card_nm +"',"+		//카드사	
														  "'',"+						//잔액
														  "'',"+						//남은개월
														  "'"+ str_charge_per +"',"+	//수수료율
														  "'"+ str_expir_date +"'"+		//만기일(구해야함) 													  
														  ");"
				);	
					
				//cSpin.close();
				//cursor.close();
				dbmgr.close();
				
				//입력완료 메세지...
				Toast.makeText(this, "SAVE OK!", Toast.LENGTH_SHORT).show();
				//검색화면으로 전환..
				Intent it = new Intent(this, CardInfoSearch.class);
				startActivity(it);
				finish();
					
				
		}catch(SQLiteException e){
			e.getStackTrace();
		}			
		
	}
		
//		if(v.getId() == R.id.button_cancel ){
//					
//		}
		
		
	}
	
	//오늘날짜를 구한다
	public void setInitDateText(){
		Date date = calendar.getTime();    
		SimpleDateFormat mDateFormat = new SimpleDateFormat ("yyyy.MM.dd");
    	String strDateTime = mDateFormat.format(date);
		date_input.setText(strDateTime);				
	}
	
	//Datapicker 세팅시 호출되는 함수
	public void updateDateText(){
		Date date = calendar.getTime();    
		SimpleDateFormat mDateFormat = new SimpleDateFormat ("yyyy.MM.dd");
    	String strDateTime = mDateFormat.format(date);
		date_input.setText(strDateTime);		
	}
	
	//Date Type형식 변환(yyyy.MM.dd)
	public String chang_Cal(Date date){
		SimpleDateFormat mDateFormat = new SimpleDateFormat ("yyyy.MM.dd");
		String strDateTime = mDateFormat.format(date);
		return strDateTime;		
	}
	
	//남은 개월수 구하기( 만기일 - 현재일 )
	public int rtn_Remaindt(Date exdt, Date curdt){
		int rtn_val = 0;		
		
		
		//rtn_val = exdt. - curdt.getDate();		
		return rtn_val;		
	}
	
	//DB 초기화 및 생성 
	public void initDB(){
		dbmgr = new DBManager(this);		
		sdb = dbmgr.getWritableDatabase();
	}
	
	//유효성 체크 
	public boolean nullZeroChk(String param){
		
		//1:품명, 2:총개월, 3:금액, 4:수수료
		boolean chk = false;
			
		
		if( (param.equals("")||param == null) ){
			//화면에 다이얼로그 뿌려줌.
	    	AlertDialog.Builder alert = new AlertDialog.Builder(CardInfoCreate.this);
	    	alert.setTitle("알림창");
	    	alert.setMessage("모든 항목은 필수 입니다.");
	    	alert.setIcon(R.drawable.icon);
	    	alert.setPositiveButton("확인", null);
	    	alert.show();
	    	chk = false;
		}else{
			chk = true;
		}
		
		return chk;
		
	}

}
